package com.cloudkinto.vo.order.outbound;

import com.cloudkinto.common.utils.MathUtils;
import com.cloudkinto.vo.cost.out.CostItemForOrderPageDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 一件代发出库单
 *
 * @author long
 */
@Data
public class NormalOutboundVo {
    private Long id;

    /**
     * 仓库id
     */
    private Long whId;

    /**
     * 客户id
     */
    private Long companyId;

    /**
     * 出库单号
     */
    @ApiModelProperty("出库单号")
    private String outboundNo;

    private Long storeId;

    /**
     * 订单品种类型 1单品单件 2单品多件 3多品混合
     */
    @ApiModelProperty("订单品种类型 1单品单件 2单品多件 3多品混合")
    private Integer orderVarietyType;

    /**
     * 订单来源 1手动创建 2外部推送 3平台拉单 4Temu合作仓
     */
    @ApiModelProperty("订单来源 1手动创建 2外部推送 3平台拉单 4Temu合作仓")
    private Integer orderOrigin;

    /**
     * 物流渠道id
     */
    @ApiModelProperty("物流渠道id")
    private Long logisticsChannelId;
    @ApiModelProperty("物流渠道代码 yamato_one(黑猫投涵) yamato_more(投涵多件) yamato_zhai 黑猫宅急便 yamato_compact 黑猫compact" )
    private String logisticsChannelCode;

    private Integer status;

    /**
     * 物流跟踪号
     */
    @ApiModelProperty("物流跟踪号")
    private String trackingNumber;

    /**
     * 销售平台
     */
    @ApiModelProperty("销售平台")
    private Integer salesPlatform;

    /**
     * 平台单号
     */
    @ApiModelProperty("平台单号")
    private String platformOrderNo;

    /**
     * 签名服务
     */
    @ApiModelProperty("签名服务")
    private Integer signatureService;

    /**
     * 保险金额
     */
    private BigDecimal insureMoney;

    /**
     * 参考单号
     */
    @ApiModelProperty("参考单号")
    private String referenceNumber;

    /**
     * 备注
     */
    private String remark;
    private String remark2;

    /**
     * 产品总数
     */
    @ApiModelProperty("产品总数")
    private Integer totalNum;

    /**
     * 包裹数
     */
    @ApiModelProperty("包裹数")
    private Integer packageNum;

    /**
     * 国家地区二字码
     */
    @ApiModelProperty("国家地区二字码")
    private String countryRegionCode;

    @ApiModelProperty("邮编")
    private String postCode;

    @ApiModelProperty("收件人")
    private String receiver;

    /**
     * 电话
     */
    @ApiModelProperty("电话")
    private String phone;

    /**
     * 邮箱
     */
    @ApiModelProperty("邮箱")
    private String email;

    /**
     * 收件人税号
     */
    @ApiModelProperty("收件人税号")
    private String taxNum;

    /**
     * 公司名称
     */
    @ApiModelProperty("公司名称")
    private String companyName;

    /**
     * 省/州
     */
    @ApiModelProperty("省/州")
    private String provinceName;

    /**
     * 城市名称
     */
    @ApiModelProperty("城市名称")
    private String cityName;

    /**
     * 门牌号
     */
    @ApiModelProperty("门牌号")
    private String houseNum;

    /**
     * 地址1
     */
    @ApiModelProperty("地址1")
    private String address1;

    /**
     * 地址2
     */
    @ApiModelProperty("地址2")
    private String address2;

    /**
     * 承运商代码
     */
    @ApiModelProperty("承运商代码")
    private String carrier;

    /**
     * 面单打印时间
     */
    @ApiModelProperty("面单打印时间")
    private Date faceSheetPrintTime;

    /**
     * 创建时间
     */
    private Date createTime;
    private Date pushWmsTime;

    /**
     * 生成波次时间
     */
    @ApiModelProperty("生成波次时间")
    private Date createWaveTime;

    /**
     * 拣货时间
     */
    @ApiModelProperty("拣货时间")
    private Date pickingTime;

    /**
     * 复核时间
     */
    @ApiModelProperty("复核时间")
    private Date recheckTime;

    /**
     * 称重时间
     */
    @ApiModelProperty("称重时间")
    private Date weighTime;

    /**
     * 出库时间
     */
    @ApiModelProperty("出库时间")
    private Date outboundTime;

    /**
     * 取消事件
     */
    @ApiModelProperty("取消事件")
    private Date cancelTime;

    @ApiModelProperty("确定异常时间")
    private Date exceptionTime;

    @ApiModelProperty("标记异常时间")
    private Date markExceptionTime;

    @ApiModelProperty("异常具体原因")
    private String exceptionReason;

    @ApiModelProperty("异常类型")
    private String exceptionType;

    @ApiModelProperty("是否拦截 1是 0否")
    private Integer interceptionFlag;

    /**
     * 0日常 1预约单 2次日达
     */
    @ApiModelProperty("0日常 1预约单 2次日达")
    private Integer reserveFlag;
    /**
     * 下单时间
     */
    @ApiModelProperty("下单时间")
    private Date orderTime;

    @ApiModelProperty("配送时间")
    private String deliveryDate;

    @ApiModelProperty("配送时间带")
    private String deliveryTimeName;

    @ApiModelProperty("附件id")
    private String fileIds;

    @Deprecated
    private List<OutboundProductVo> productDtoList;

    @ApiModelProperty("产品信息")
    private String skuDetail;

    @ApiModelProperty("费用情况")
    List<CostItemForOrderPageDto> billItems;

    @ApiModelProperty("包裹")
    List<OutboundPackageDetail> packageDetailList;
    @ApiModelProperty("费用总计")
    private String costBillTotal;

    @ApiModelProperty("费用类型 0实扣 1预扣 -1 --")
    private Integer statusCost;

    /**
     * 最新状态
     */
    @ApiModelProperty("最新状态")
    private String latestStatus;

    /**
     * 轨迹更新时间
     */
    @ApiModelProperty("轨迹更新时间")
    private Date traceUpdateTime;

    /**
     * 妥投时间
     */
    @ApiModelProperty("妥投时间")
    private Date deliveryConfirmationTime;

    /**
     * 运输天数
     */
    @ApiModelProperty("运输天数")
    private Integer transportDays;

    @ApiModelProperty("自定义渠道名")
    private String customizeChannelName;

    public String getCostBillTotal() {
        if (billItems == null) {
            return "--";
        }
        double sum = billItems.stream().mapToDouble(CostItemForOrderPageDto::getTotalFee).sum();
        return MathUtils.numberFormat(sum, 4).toString();
    }

    public Integer getStatusCost() {
        if (billItems == null) {
            return -1;
        }
        return billItems.get(0).getStatus();
    }



}
